初始化
如果为一个对象提供了初始式,这个初始式将确定对象的初始值。如果没有提供初始式,全局的(4.9.4节)、名字空间的(8.2节)和局部静态的(7.1.2节、10.2.4节)对象(统称为静态对象)将被自动初始化为适当类型的0。例如,
int a; // 意思是 "int a = 0;"
double d; // 意思是 "double d = 0.0;"
局部对象(有时称为自动对象)和在自由存储区里建立的对象(有时被称为动态对象或者堆对象)将不会用默认值做初始化。例如,
void f()
{
int x; // x没有定义良好的值
// ...
}
数组和结构的成员,也根据数组或结构是否为静态来确定是否默认地进行初始化。用户定义类型可以有自定义的默认初始化方式(10.4.2节)。
更复杂的对象需要以多于一个的值作为初始式。数组(5.2.1节)和结构(5.7节)的C风格初始化采用的是 { 和 } 括起的初始式列表描述。带有构造函数的用户定义类型采用的是函数风格的参数表形式(2.5.2节、10.2.3节)。
请注意,在声明中写一对空的括号总意味着是“函数”(7.1节)。例如,
int a[] = {1, 2}; // 数组的初始式
Point z(1, 2); // 函数风格的初始式(通过构造函数完成初始化)
int f(); // 函数声明
🔚